home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / p_man / cat3 / ifl / iflJFIF.z / iflJFIF
Text File  |  1998-10-20  |  24KB  |  397 lines

  1.  
  2.  
  3.  
  4. iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))        IIIImmmmaaaaggggeeee FFFFoooorrrrmmmmaaaatttt LLLLiiiibbbbrrrraaaarrrryyyy CCCC++++++++ RRRReeeeffffeeeerrrreeeennnncccceeee MMMMaaaannnnuuuuaaaallll         iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      iiiiffffllllJJJJFFFFIIIIFFFF - a JFIF formatted image file
  10.  
  11. HHHHEEEEAAAADDDDEEEERRRR FFFFIIIILLLLEEEE
  12.      #include <ifl/iflJFIF.h>
  13.  
  14. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  15.      This IFL format provides support for reading and writing image files with
  16.      the JFIF format, Version 4. This software is based in part on the work of
  17.      the Independent JPEG Group. This format implements JPEG image compression
  18.      and decompression. JPEG is intended for compressing "real-world" scenes;
  19.      cartoons and other non-realistic images are not its strong suit. JPEG is
  20.      lossy, meaning that the output image is not necessarily identical to the
  21.      input image. Hence you must not use JPEG if you have to have identical
  22.      output bits. However, on typical images of real-world scenes, very good
  23.      compression levels can be obtained with no visible change, and amazingly
  24.      high compression levels are possible if you can tolerate a low-quality
  25.      image.  For more details, see the references, or just experiment with
  26.      various compression settings. JFIF implements JPEG baseline and
  27.      extended-sequential compression processes. Provision is made for
  28.      supporting all variants of these processes, although some uncommon
  29.      parameter settings aren't implemented yet. For legal reasons, the
  30.      arithmetic-coding process is not implemented. At present no provision is
  31.      made for supporting the progressive, hierarchical, or lossless processes
  32.      defined in the standard.
  33.  
  34.      This format is always of type iflUChar and can be one of three color
  35.      models: iflMinBlack, iflRGB or iflCMYK. Its order is always
  36.      iflInterleaved and the orientation is iflUpperLeftOrigin.  Its page size
  37.      is forced to be the size of the image. Hence this format is not tiled. So
  38.      even if one is just reading or writing a small portion of the image, the
  39.      entire image will be read or written. If you wish to have tiled JPEG
  40.      compressed data use the iflTIFF format.
  41.  
  42.      A number of tag values are available to set/query encoding/decoding
  43.      parameters with the ggggeeeettttIIIItttteeeemmmm() and sssseeeettttIIIItttteeeemmmm() methods.  Normally for
  44.      creating or reading images in general use, the default values of these
  45.      parametrs are quite sufficient and one would not need to use these
  46.      methods.
  47.  
  48.      While encoding, i.e. creating a JPEG file, _i_f_l_J_F_I_F_c_o_m_p_r_e_s_s_i_o_n_Q_u_a_l_i_t_y can
  49.      be used to set/query the compression quality; _i_f_l_J_F_I_F_g_r_a_y_S_c_a_l_e_E_n_c_o_d_i_n_g
  50.      can be used to create a monochrome JPEG file from a color input.
  51.      _i_f_l_J_F_I_F_e_n_a_b_l_e_O_p_t_H_u_f_f_T_a_b can be used to enable optimization of entropy
  52.      encoding parameters. Advanced users can use _i_f_l_J_F_I_F_r_e_s_t_a_r_t_I_n_t_e_r_v_a_l to
  53.      emit a restart marker after a specified number of MCU rows or blocks; can
  54.      use _i_f_l_J_F_I_F_s_m_o_o_t_h_i_n_g_F_a_c_t_o_r to smooth the input to eliminate dithering
  55.      noise. Absolute wizards can use _i_f_l_J_F_I_F_q_T_a_b_l_e to specify their own
  56.      quantization tables; _s_i_f_l_J_F_I_F_s_a_m_p_l_i_n_g_F_a_c_t_o_r_s can be used to set/get the
  57.      horizontal and vertical sampling factors of the different components. The
  58.      "wizard" switches are intended for experimentation with JPEG. If you
  59.      don't know what you are doing, _d_o_n'_t _u_s_e _t_h_e_m. You can easily produce
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))        IIIImmmmaaaaggggeeee FFFFoooorrrrmmmmaaaatttt LLLLiiiibbbbrrrraaaarrrryyyy CCCC++++++++ RRRReeeeffffeeeerrrreeeennnncccceeee MMMMaaaannnnuuuuaaaallll         iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))
  71.  
  72.  
  73.  
  74.      files with worse image quality and/or poorer compression than you'll get
  75.      from the default settings. Furthermore, these switches should not be used
  76.      when making files intended for general use, because not all JPEG
  77.      implementations will support unusual JPEG parameter settings.
  78.  
  79.      While decoding advanced users can use _i_f_l_J_F_I_F_b_l_o_c_k_S_m_o_o_t_h_i_n_g to perform
  80.      cross block smoothing; _i_f_l_J_F_I_F_g_r_a_y_S_c_a_l_e_D_e_c_o_d_i_n_g can be used to force
  81.      gray-scale output even if JPEG file is color.
  82.  
  83.      The environment variable JPEGMEM can be used to set the limit for amount
  84.      of memory to use in processing large images. Value is in thousands of
  85.      bytes, or millions of bytes if "M" is attached to the number. For
  86.      example, setting JPEGMEM to 4m selects 4000000 bytes. If you get an
  87.      "insufficient memory" error, try specifying a smaller memory value, even
  88.      0 to use the absolute minimum space. For most cases you would not need to
  89.      set JPEGMEM.
  90.  
  91.      The default extension for image files in the JFIF format is '.jpg'.  When
  92.      you create a file with that extension IFL will assume you want the JFIF
  93.      format, unless you override it with the iflFormat parameter.
  94.  
  95. TTTTAAAAGGGG VVVVAAAALLLLUUUUEEEESSSS FFFFOOOORRRR GGGGEEEETTTT IIIITTTTEEEEMMMM
  96.      The followng tag values are supported with ggggeeeettttIIIItttteeeemmmm():
  97.  
  98.    iiiiffffllllJJJJFFFFIIIIFFFFccccoooommmmpppprrrreeeessssssssiiiioooonnnnQQQQuuuuaaaalllliiiittttyyyy
  99.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFccccoooommmmpppprrrreeeessssssssiiiioooonnnnQQQQuuuuaaaalllliiiittttyyyy, int* val)
  100.  
  101.  
  102.      This function returns the value of the quality factor used in encoding or
  103.      creating the JFIF image file. The "quality factor" is the amount by which
  104.      quantization tables are scaled to adjust image quality.
  105.  
  106.    iiiiffffllllJJJJFFFFIIIIFFFFrrrreeeessssttttaaaarrrrttttIIIInnnntttteeeerrrrvvvvaaaallll
  107.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFrrrreeeessssttttaaaarrrrttttIIIInnnntttteeeerrrrvvvvaaaallll, int* val)
  108.  
  109.  
  110.      This function returns the value of the restart interval used in encoding
  111.      or creating the JFIF image file. This is the interval at which a JPEG
  112.      restart marker is emitted. This interval is either in number of MCU rows
  113.      or blocks.
  114.  
  115.    iiiiffffllllJJJJFFFFIIIIFFFFqqqqTTTTaaaabbbblllleeee
  116.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFqqqqTTTTaaaabbbblllleeee, char** qtablefile)
  117.  
  118.  
  119.      This function returns the filename from which the custom quantization
  120.      tables were read. These are tables used in encoding or creating the JFIF
  121.      image file. If default tables were used, NULL is returned.
  122.  
  123.    iiiiffffllllJJJJFFFFIIIIFFFFssssaaaammmmpppplllliiiinnnnggggFFFFaaaaccccttttoooorrrrssss
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))        IIIImmmmaaaaggggeeee FFFFoooorrrrmmmmaaaatttt LLLLiiiibbbbrrrraaaarrrryyyy CCCC++++++++ RRRReeeeffffeeeerrrreeeennnncccceeee MMMMaaaannnnuuuuaaaallll         iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))
  137.  
  138.  
  139.  
  140.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFssssaaaammmmpppplllliiiinnnnggggFFFFaaaaccccttttoooorrrrssss,
  141.                             * horiz, int* vert, int ch)
  142.  
  143.  
  144.      The horizontal and vertical sampling factors used (in encoding or
  145.      creating the JFIF image file) for channel _c_h are returned in _h_o_r_i_z and
  146.      _v_e_r_t.
  147.  
  148.    iiiiffffllllJJJJFFFFIIIIFFFFssssmmmmooooooootttthhhhiiiinnnnggggFFFFaaaaccccttttoooorrrr
  149.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFssssmmmmooooooootttthhhhiiiinnnnggggFFFFaaaaccccttttoooorrrr, int* val)
  150.  
  151.  
  152.      This function returns the value of the smoothing factor, used to
  153.      eliminate dithering noise while encoding or creating the JFIF image file.
  154.      The value ranging from 0 to 100, indicates the strength of smoothing.
  155.      Zero means no smoothing.
  156.  
  157.    iiiiffffllllJJJJFFFFIIIIFFFFbbbblllloooocccckkkkSSSSmmmmooooooootttthhhhiiiinnnngggg
  158.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFbbbblllloooocccckkkkSSSSmmmmooooooootttthhhhiiiinnnngggg, int* on)
  159.  
  160.  
  161.      This function returns TRUE if cross-block smoothing (a decoding
  162.      parameter) is enabled; FALSE otherwise.
  163.  
  164.    iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeDDDDeeeeccccooooddddiiiinnnngggg
  165.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeDDDDeeeeccccooooddddiiiinnnngggg, int* on)
  166.  
  167.  
  168.      This function returns TRUE if grayscale decoding is enabled i.e.a color
  169.      file is read as a monochrome image; FALSE otherwise.
  170.  
  171.    iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeEEEEnnnnccccooooddddiiiinnnngggg
  172.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeEEEEnnnnccccooooddddiiiinnnngggg, int* on)
  173.  
  174.  
  175.      This function returns TRUE if grayscale encoding is enabled i.e.a
  176.      monochrome JFIF file is created from a color input; FALSE otherwise.
  177.  
  178.    iiiiffffllllJJJJFFFFIIIIFFFFeeeennnnaaaabbbblllleeeeOOOOppppttttHHHHuuuuffffffffTTTTaaaabbbb
  179.           iflStatus getItem(iiiiffffllllJJJJFFFFIIIIFFFFeeeennnnaaaabbbblllleeeeOOOOppppttttHHHHuuuuffffffffTTTTaaaabbbb, int* on)
  180.  
  181.  
  182.      This function returns TRUE if optimization of entropy encoding parameters
  183.      is enabled; FALSE otherwise.
  184.  
  185. TTTTAAAAGGGG VVVVAAAALLLLUUUUEEEESSSS FFFFOOOORRRR SSSSEEEETTTT IIIITTTTEEEEMMMM
  186.      The followng tag values are supported with sssseeeettttIIIItttteeeemmmm():
  187.  
  188.    iiiiffffllllJJJJFFFFIIIIFFFFbbbblllloooocccckkkkSSSSmmmmooooooootttthhhhiiiinnnngggg
  189.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFbbbblllloooocccckkkkSSSSmmmmooooooootttthhhhiiiinnnngggg, int on)
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))        IIIImmmmaaaaggggeeee FFFFoooorrrrmmmmaaaatttt LLLLiiiibbbbrrrraaaarrrryyyy CCCC++++++++ RRRReeeeffffeeeerrrreeeennnncccceeee MMMMaaaannnnuuuuaaaallll         iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))
  203.  
  204.  
  205.  
  206.      This function can be used to enable cross-block smoothing while decoding
  207.      or reading a JFIF image file, by setting _o_n = TRUE. This is quite
  208.      memory-intensive and only seems to improve the image at very low quality
  209.      settings (compression quality of 10 to 20 or so).  At normal quality
  210.      settings it may make things worse. By default cross-block smoothing is
  211.      disabled, _o_n = FALSE. This functionality is meant for advanced users with
  212.      some knowledge of JPEG.
  213.  
  214.    iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeDDDDeeeeccccooooddddiiiinnnngggg
  215.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeDDDDeeeeccccooooddddiiiinnnngggg, int on)
  216.  
  217.  
  218.      This function can be used to force a JFIF color file to be read as a
  219.      monochrome image (i.e. iflRGB color space is converted to iflMinBlack),
  220.      by setting _o_n = TRUE.
  221.  
  222.    iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeEEEEnnnnccccooooddddiiiinnnngggg
  223.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFggggrrrraaaayyyySSSSccccaaaalllleeeeEEEEnnnnccccooooddddiiiinnnngggg, int on)
  224.  
  225.  
  226.      This method can be used to enable creation of a monochrome JFIF image
  227.      file from a color (ilRGB) input, by setting _o_n = TRUE. By default this
  228.      functionality is disabled and a color input produces a color output. This
  229.      functionality is meant for advanced users with some knowledge of JPEG.
  230.  
  231.    iiiiffffllllJJJJFFFFIIIIFFFFeeeennnnaaaabbbblllleeeeOOOOppppttttHHHHuuuuffffffffTTTTaaaabbbb
  232.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFeeeennnnaaaabbbblllleeeeOOOOppppttttHHHHuuuuffffffffTTTTaaaabbbb, int on)
  233.  
  234.  
  235.      This method can be used to enable optimization of entropy encoding
  236.      parameters, used while encoding or creating a JFIF image file, by setting
  237.      _o_n = TRUE.  By default this optimization is not enabled and default
  238.      encoding parameters are used.  Enabling the optimization usually makes
  239.      the JPEG file a little smaller, but the compression runs somewhat slower
  240.      and needs much more memory. Image quality and speed of decompression are
  241.      unaffected by enabling optimization.
  242.  
  243.    iiiiffffllllJJJJFFFFIIIIFFFFccccoooommmmpppprrrreeeessssssssiiiioooonnnnQQQQuuuuaaaalllliiiittttyyyy
  244.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFccccoooommmmpppprrrreeeessssssssiiiioooonnnnQQQQuuuuaaaalllliiiittttyyyy, int val)
  245.  
  246.  
  247.      This function sets the quality factor used in encoding or creating a JFIF
  248.      image file to _v_a_l. _v_a_l can range from 0 (worst) to 100 (best), default is
  249.      75.  The quality factor lets you trade off compressed file size against
  250.      quality of the reconstructed image: the higher the quality setting, the
  251.      larger the JPEG file, and the closer the output image will be to the
  252.      original input. Normally you want to use the lowest quality setting
  253.      (smallest file) that decompresses into something visually
  254.      indistinguishable from the original image.  For this purpose the quality
  255.      setting should be between 50 and 95; the default of 75 is often about
  256.      right. If you see defects at 75, then go up 5 or 10 counts at a time
  257.      until you are happy with the output image; The optimal setting will vary
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))        IIIImmmmaaaaggggeeee FFFFoooorrrrmmmmaaaatttt LLLLiiiibbbbrrrraaaarrrryyyy CCCC++++++++ RRRReeeeffffeeeerrrreeeennnncccceeee MMMMaaaannnnuuuuaaaallll         iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))
  269.  
  270.  
  271.  
  272.      from one image to another.
  273.  
  274.    iiiiffffllllJJJJFFFFIIIIFFFFqqqqTTTTaaaabbbblllleeee
  275.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFqqqqTTTTaaaabbbblllleeee, char* qtablefile)
  276.  
  277.  
  278.      This function can be used to set the quantization tables to be used in
  279.      the encoding process to those in the file _q_t_a_b_l_e_f_i_l_e. The file should
  280.      contain one to four tables (64 values each) as plain text.  Comments
  281.      preceded by '#' may be included in the file.  The tables are implicitly
  282.      numbered 0,1,etc. If a non-zero quality factor is also specified, the
  283.      values in the file are scaled according to a quality scaling curve. If
  284.      _q_t_a_b_l_e_f_i_l_e = NULL, default tables are used. This function is meant for
  285.      wizards with indepth knowledge of JPEG.
  286.  
  287.    iiiiffffllllJJJJFFFFIIIIFFFFrrrreeeessssttttaaaarrrrttttIIIInnnntttteeeerrrrvvvvaaaallll
  288.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFrrrreeeessssttttaaaarrrrttttIIIInnnntttteeeerrrrvvvvaaaallll, int val, int inRows)
  289.  
  290.  
  291.      This function is used to set the restart interval used in encoding or
  292.      creating the JFIF image file. If _i_n_R_o_w_s = TRUE then a JPEG restart marker
  293.      is emitted every _v_a_l MCU rows; else if _i_n_R_o_w_s = FALSE, a JPEG restart
  294.      marker is emitted every _v_a_l MCU blocks. The restart option inserts extra
  295.      markers that allow a JPEG decoder to resynchronize after a transmission
  296.      error.  Without restart markers, any damage to a compressed file will
  297.      usually ruin the image from the point of the error to the end of the
  298.      image; with restart markers, the damage is usually confined to the
  299.      portion of the image up to the next restart marker.  Of course, the
  300.      restart markers occupy extra space.  We recommend _v_a_l = 1 for images that
  301.      will be transmitted across unreliable networks such as Usenet. By default
  302.      no extra markers (_v_a_l = 0) are emitted. This functionality is meant for
  303.      advanced users with some knowledge of JPEG.
  304.  
  305.    iiiiffffllllJJJJFFFFIIIIFFFFssssaaaammmmpppplllliiiinnnnggggFFFFaaaaccccttttoooorrrrssss
  306.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFssssaaaammmmpppplllliiiinnnnggggFFFFaaaaccccttttoooorrrrssss,
  307.                             int horiz, int vert, int ch)
  308.  
  309.  
  310.      This function can be used to set the JPEG sampling factors used in
  311.      creating a JFIF image file. The horizontal and vertical sampling for
  312.      channel _c_h are set to _h_o_r_i_z and _v_e_r_t. This function is meant for wizards
  313.      with indepth knowledge of JPEG.
  314.  
  315.    iiiiffffllllJJJJFFFFIIIIFFFFssssmmmmooooooootttthhhhiiiinnnnggggFFFFaaaaccccttttoooorrrr
  316.           iflStatus setItem(iiiiffffllllJJJJFFFFIIIIFFFFssssmmmmooooooootttthhhhiiiinnnnggggFFFFaaaaccccttttoooorrrr, int val)
  317.  
  318.  
  319.      This function sets the smoothing factor, useful in eliminating dithering
  320.      noise, to _v_a_l. This is used while encoding or creating a JFIF image file.
  321.      _v_a_l can range from 0 to 100, indicating the strength of smooting; 0, the
  322.      default means no smoothing. This smoothing option filters the input to
  323.      eliminate fine-scale noise.  This is often useful when converting GIF
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))        IIIImmmmaaaaggggeeee FFFFoooorrrrmmmmaaaatttt LLLLiiiibbbbrrrraaaarrrryyyy CCCC++++++++ RRRReeeeffffeeeerrrreeeennnncccceeee MMMMaaaannnnuuuuaaaallll         iiiiffffllllJJJJFFFFIIIIFFFF((((3333))))
  335.  
  336.  
  337.  
  338.      files to JPEG: a moderate smoothing factor of 10 to 50 gets rid of
  339.      dithering patterns in the input file, resulting in a smaller JPEG file
  340.      and a better-looking image.  Too large a smoothing factor will visibly
  341.      blur the image, however. This functionality is meant for advanced users
  342.      with some knowledge of JPEG.
  343.  
  344. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  345.      iflFile, ilFileImg
  346.  
  347.      The best short technical introduction to the JPEG compression algorithm
  348.      is:  Wallace, Gregory K.  "The JPEG Still Picture Compression Standard",
  349.      Communications of the ACM, April 1991 (vol. 34 no. 4), pp. 30-44.
  350.      (Adjacent articles in that issue discuss MPEG motion picture compression,
  351.      applications of JPEG, and related topics.)  If you don't have the CACM
  352.      issue handy, a PostScript file containing a revised version of the
  353.      article is available at ftp.uu.net, graphics/jpeg/wallace.ps.Z.  The file
  354.      (actually a preprint for an article to appear in IEEE Trans. Consumer
  355.      Electronics) omits the sample images that appeared in CACM, but it
  356.      includes corrections and some added material.  Note: the Wallace article
  357.      is copyright ACM and IEEE, and it may not be used for commercial
  358.      purposes.
  359.  
  360.      A somewhat less technical, more leisurely introduction to JPEG can be
  361.      found in "The Data Compression Book" by Mark Nelson, published by M&T
  362.      Books (Redwood City, CA), 1991, ISBN 1-55851-216-0.  This book provides
  363.      good explanations and example C code for a multitude of compression
  364.      methods including JPEG.  It is an excellent source if you are comfortable
  365.      reading C code but don't know much about data compression in general
  366.  
  367.      A new textbook about JPEG is "JPEG Still Image Data Compression Standard"
  368.      by William B. Pennebaker and Joan L. Mitchell, published by Van Nostrand
  369.      Reinhold, 1993, ISBN 0-442-01272-1.  This book includes the complete text
  370.      of the ISO JPEG standards (DIS 10918-1 and draft DIS 10918-2).
  371.  
  372.      In the US, copies of the JPEG standard itself may be ordered from ANSI
  373.      Sales at (212) 642-4900.
  374.  
  375.      The JPEG standard does not specify all details of an interchangeable file
  376.      format.  For the omitted details the "JFIF" conventions, revision 1.02 is
  377.      followed.  A copy of the JFIF spec is available from:
  378.  
  379.                Literature Department
  380.                C-Cube Microsystems, Inc.
  381.                399A West Trimble Road
  382.                San Jose, CA  95131
  383.                (408) 944-6300
  384.  
  385.      A PostScript version of this document is available at ftp.uu.net, file
  386.      graphics/jpeg/jfif.ps.Z.  It can also be obtained by e-mail from the C-
  387.      Cube mail server, netlib@c3.pla.ca.us.  Send the message "send jfif_ps
  388.      from jpeg" to the server to obtain the JFIF document; send the message
  389.      "help" if you have trouble.
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.